home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 17 / AMIGAplus Sonderheft 17 (1999)(ICP)(DE)[!].iso / Rexx / FramesToAnim.pprx < prev    next >
Text File  |  1998-04-27  |  4KB  |  158 lines

  1. /* Personal Paint Amiga Rexx script - Copyright © 1995-1998 Cloanto Italia srl */
  2.  
  3. /* $VER: FramesToAnim.pprx 1.3 */
  4.  
  5. /** ENG
  6.   This script converts a set of separate image-files into an animation.
  7.   The files must contain at least one numerical character.
  8.   The sequence of numerical characters is used as frame counter
  9.   (e.g.: if "Frame 0001.gif" is selected, this script tries to load it,
  10.   then "Frame 0002.gif", and so on).
  11. */
  12.  
  13. /** DEU
  14.   Dieses Skript dient zur Umwandlung einer Reihe von Einzelbildern in eine
  15.   Animation. Wenn der Stamm des Dateinamens eine oder mehrere
  16.   aufeinanderfolgende Zahlen enthält, werden diese zur Speicherung der
  17.   Einzelbildnummer verwendet. Beispiel:  "Animation_000.pic" wird zu
  18.   "Animation_001.pic", "Animation_002.pic", usw. Die Nummer des ersten
  19.   Einzelbilders läßt sich individuell festlegen.
  20. */
  21.  
  22. /** ITA
  23.   Questo script crea un'animazione partendo da un insieme di file di
  24.   immagini separate. I file devono contenere almeno un carattere numerico.
  25.   La sequenza di caratteri numerici viene usata come contatore di fotogrammi
  26.   (es.: selezionando "Frame 0001.gif", lo script legge questo file,
  27.   quindi "Frame 0002.gif", e cosi' via).
  28. */
  29.  
  30. IF ARG(1, EXISTS) THEN
  31.     PARSE ARG PPPORT
  32. ELSE
  33.     PPPORT = 'PPAINT'
  34.  
  35. IF ~SHOW('P', PPPORT) THEN DO
  36.     IF EXISTS('PPaint:PPaint') THEN DO
  37.         ADDRESS COMMAND 'Run >NIL: PPaint:PPaint'
  38.         DO 30 WHILE ~SHOW('P',PPPORT)
  39.              ADDRESS COMMAND 'Wait >NIL: 1 SEC'
  40.         END
  41.     END
  42.     ELSE DO
  43.         SAY "Personal Paint could not be loaded."
  44.         EXIT 10
  45.     END
  46. END
  47.  
  48. IF ~SHOW('P', PPPORT) THEN DO
  49.     SAY 'Personal Paint Rexx port could not be opened'
  50.     EXIT 10
  51. END
  52.  
  53. ADDRESS VALUE PPPORT
  54. OPTIONS RESULTS
  55. OPTIONS FAILAT 10000
  56.  
  57. Get 'LANG'
  58. IF RESULT = 1 THEN DO        /* Deutsch */
  59.     txt_req_sel       = 'Erstes Bild der Sequenz angeben'
  60.     txt_err_badname   = 'Ungültiger Name'
  61.     txt_err_abort     = 'Ladevorgang wurde abgebrochen'
  62.     txt_err_load      = 'Fehler beim Laden: '
  63.     txt_err_oldclient = 'Für dieses Skript_ist eine neuere Version_von Personal Paint erforderlich'
  64. END
  65. ELSE IF RESULT = 2 THEN DO    /* Italiano */
  66.     txt_req_sel       = 'Selezionare primo fotogramma'
  67.     txt_err_badname   = 'Nome fotogramma non valido'
  68.     txt_err_abort     = 'Operazione annullata'
  69.     txt_err_load      = 'Errore nella lettura: '
  70.     txt_err_oldclient = 'Questa procedura richiede_una versione più recente_di Personal Paint'
  71. END
  72. ELSE DO                /* English */
  73.     txt_req_sel       = 'Select First Frame of Sequence'
  74.     txt_err_badname   = 'Invalid frame name'
  75.     txt_err_abort     = 'User abort during load'
  76.     txt_err_load      = 'Error during load: '
  77.     txt_err_oldclient = 'This script requires a newer_version of Personal Paint'
  78. END
  79.  
  80. Version 'REXX'
  81. rexxversion = RESULT
  82. IF rexxversion < 7 THEN DO
  83.     RequestNotify 'PROMPT "'txt_err_oldclient'"'
  84.     EXIT 10
  85. END
  86.  
  87. IF rexxversion < 4 THEN DO
  88.     FreeBrush
  89.     IF RC ~= 0 THEN
  90.         EXIT RC
  91.     bshfname = 'T:pprx_bsh.'PRAGMA('ID')
  92.     IF OPEN(bshfile, bshfname, 'W') THEN DO
  93.         WRITECH(bshfile, '464F524D 0000002A 494C424D 424D4844 00000014 00010001 00000000 01020100 00001010 028001E0 424F4459 00000002 FF00'X)
  94.         CALL CLOSE(bshfile)
  95.         LoadBrush bshfname 'FORCE'
  96.     END
  97. END
  98.  
  99. LockGUI
  100. RequestFile '"'txt_req_sel'"'
  101. IF RC = 0 THEN DO
  102.     errcode = 0
  103.     ndigits = 0
  104.     loadname = RESULT
  105.  
  106.     fnpos = MAX(LASTPOS('/', loadname), LASTPOS(':', loadname), 1)
  107.  
  108.     npos1 = VERIFY(loadname, '0123456789', 'M', fnpos)
  109.     IF npos1 > 0 THEN DO
  110.         ndigits = 1
  111.         fnlen = LENGTH(loadname)
  112.         DO npos = npos1 + 1 TO fnlen
  113.             IF VERIFY(loadname, '0123456789', 'M', npos) = npos THEN
  114.                 ndigits = ndigits + 1
  115.             ELSE
  116.                 LEAVE
  117.         END
  118.     END
  119.  
  120.     IF ndigits = 0 THEN DO
  121.         errmess = txt_err_badname
  122.         errcode = 1000
  123.     END
  124.     ELSE DO
  125.         name1 = SUBSTR(loadname, 2, npos1 - 2)
  126.         name2 = SUBSTR(loadname, npos1 + ndigits, fnlen - npos1 - ndigits)
  127.         fnum = SUBSTR(loadname, npos1, ndigits)
  128.  
  129.         DO FOREVER
  130.             AddFrames        /* add one frame */
  131.             SetFramePosition 'NEXT'
  132.             fname = name1 || RIGHT(fnum, ndigits, "0") || name2
  133.             LoadImage '"'fname'" FORCE QUIET'
  134.             IF RC ~= 0 THEN DO
  135.                 IF RC = 5 THEN
  136.                     errmess = txt_err_abort
  137.                 ELSE IF RC ~= 36 THEN
  138.                     errmess = txt_err_load || RC
  139.  
  140.                 IF RC ~= 36 THEN errcode = RC
  141.  
  142.                 DeleteFrames    /* delete current (unused) frame */
  143.                 OptimizeAnimation 'QUIET'
  144.                 LEAVE
  145.             END
  146.             fnum = fnum + 1
  147.         END
  148.     END
  149.     IF errcode > 0 THEN
  150.         RequestNotify 'PROMPT "'errmess'"'
  151. END
  152. UnlockGUI
  153.  
  154. IF rexxversion < 4 THEN DO
  155.     FreeBrush 'FORCE'
  156.     ADDRESS COMMAND 'Delete >NIL: 'bshfname
  157. END
  158.